﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace ExtremeEvents.Models
{
    public class Utilizador
    {
        public int id { get; set; }
        [Required]
        [Display(Name = "Nome de utilizador:")]
        public string Login { get; set; }

        [Required]
        [Display(Name = "Primeiro Nome:")]
        public string Primeiro_Nome { get; set; }

        [Required]
        [Display(Name = "Último Nome:")]
        public string Ultimo_Nome { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email:")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "Error_18: A {0} tem de ter {2} caracteres.", MinimumLength = 7)]
        [DataType(DataType.Password)]
        [Display(Name = "Password:")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirmação password")]
        [Compare("Password", ErrorMessage = "Error_19: A password e a confirmação não coincidem.")]
        public string Confirmacao_Password { get; set; }

        [Display(Name = "Nome da Organização")]
        public string Nome_Organizacao { get; set; }

        [Display(Name = "Morada")]
        public string Morada { get; set; }

        [Display(Name = "Nº")]
        public string Numero { get; set; }

        [Required]
        [Display(Name = "Género")]
        public string Genero { get; set; }

        [Display(Name = "Distrito")]
        public string Distrito { get; set; }

        [Display(Name = "Concelho")]
        public string Concelho { get; set; }

        [Display(Name = "Freguesia")]
        public string Freguesia { get; set; }

        [Display(Name = "País")]
        public string Pais { get; set; }

        public IEnumerable<string> Paises { get; set; }

        [Display(Name = "Código Postal")]
        public string Codigo_Postal { get; set; }

        [Required]
        [Display(Name = "NIF")]
        [StringLength(15, ErrorMessage = "Error_20: O {0} tem de ter no minimo {2} caracteres.", MinimumLength = 9)]
        [RegularExpression(@"([0-9]+)", ErrorMessage = "Error_21: Tem de ser um número.")]
        public string Nif { get; set; }
    }

    //Model referente à alteração do utilizador
    public class EditUtilizador {

        [Key]
        public Guid guid { get; set; }

        [Display(Name = "Nome de utilizador:")]
        public string Login { get; set; }

        [Required]
        [Display(Name = "Primeiro Nome:")]
        public string Primeiro_Nome { get; set; }

        [Required]
        [Display(Name = "Último Nome:")]
        public string Ultimo_Nome { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email:")]
        public string Email { get; set; }

        [Display(Name = "Nome da Organização")]
        public string Nome_Organizacao { get; set; }

        [Display(Name = "Morada")]
        public string Morada { get; set; }

        [Display(Name = "Nº")]
        public string Numero { get; set; }

        [Required]
        [Display(Name = "Género")]
        public string Genero { get; set; }

        [Display(Name = "Distrito")]
        public string Distrito { get; set; }

        [Display(Name = "Concelho")]
        public string Concelho { get; set; }

        [Display(Name = "Freguesia")]
        public string Freguesia { get; set; }

        [Display(Name = "País")]
        public string Pais { get; set; }

        [Display(Name = "Código Postal")]
        public string Codigo_Postal { get; set; }

        [Required]
        [Display(Name = "NIF")]
        [StringLength(15, ErrorMessage = "Error_20: O {0} tem de ter no minimo {2} caracteres.", MinimumLength = 9)]
        [RegularExpression(@"([0-9]+)", ErrorMessage = "Error_21: Tem de ser um número.")]
        public string Nif { get; set; }

        [StringLength(100, ErrorMessage = "Error_18: A {0} tem de ter {2} caracteres.", MinimumLength = 7)]
        [DataType(DataType.Password)]
        [Display(Name = "Password atual:")]
        public string Password_Atual { get; set; }

        [StringLength(100, ErrorMessage = "Error_18: A {0} tem de ter {2} caracteres.", MinimumLength = 7)]
        [DataType(DataType.Password)]
        [Display(Name = "Nova password:")]
        public string Password_Nova { get; set; }
  }

    //Model referente à visualização do utilizador
    public class ViewUtilizador
    {

        [Key]
        public Guid guid { get; set; }

        [Display(Name = "Nome de utilizador:")]
        public string Login { get; set; }

        [Required]
        [Display(Name = "Primeiro Nome:")]
        public string Primeiro_Nome { get; set; }

        [Required]
        [Display(Name = "Último Nome:")]
        public string Ultimo_Nome { get; set; }

        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email:")]
        public string Email { get; set; }

        [Display(Name = "Nome da Organização")]
        public string Nome_Organizacao { get; set; }

        [Display(Name = "Morada")]
        public string Morada { get; set; }

        [Display(Name = "Nº")]
        public string Numero { get; set; }

        [Required]
        [Display(Name = "Género")]
        public string Genero { get; set; }

        [Display(Name = "Distrito")]
        public string Distrito { get; set; }

        [Display(Name = "Concelho")]
        public string Concelho { get; set; }

        [Display(Name = "Freguesia")]
        public string Freguesia { get; set; }

        [Display(Name = "País")]
        public string Pais { get; set; }

        [Display(Name = "Código Postal")]
        public string Codigo_Postal { get; set; }

        [Required]
        [Display(Name = "NIF")]
        [StringLength(15, ErrorMessage = "Error_20: O {0} tem de ter no minimo {2} caracteres.", MinimumLength = 9)]
        [RegularExpression(@"([0-9]+)", ErrorMessage = "Error_21: Tem de ser um número.")]
        public string Nif { get; set; }
    }
}